package partyBrookerHameln;
import AlgoTools.IO;

/**
 * Die Klasse Benutzerschnittstelle erzeugt ein Objekt der Klasse Verwaltung.
 * Von hier aus werden alle grundlegenden Funktionen ausgeführt. Außerdem ist
 * diese Klasse für die Menüführung, sowie für das Abfangen von Eingabefehlern
 * verantwortlich.
 *
 */
public class Benutzerschnittstelle {
	Verwaltung s = new Verwaltung();

	/**
	 * Der Default-Konstruktor für diese Klasse
	 */
	public Benutzerschnittstelle() {

	}

	/**
	 * Dem Benutzer werden die Auswahlmöglichkeiten des Hauptmenüs gezeigt und
	 * er kann auswählen in welches Menü er springen will. Alle anderen Eingaben
	 * werden abgefangen.
	 */
	public void hauptmenu() {
		while (true) {
			int menu = 0;
			System.out.println("╔═══════════╦═══════════════════╗");
			System.out.println("║ HAUPTMENÜ ║ " + s.getAktuellesDatum().toString() + " ║");
			System.out.println("╚═╦══┬══════╩═══════════════┬═══╝");
			System.out.println("  ║  |  1. Simulationsmenü  ├─{");
			System.out.println("  ║  └──┬───────────────────┴┐");
			System.out.println("  ║     |   2. Kundenmenü    ├─{");
			System.out.println("  ║     └───┬────────────────┴┐");
			System.out.println("  ║         |  3. Objektmenü  ├─{");
			System.out.println("  ║         └─────────────────┘");
			System.out.println("  ║ [1 - 3]");

			// System.out
			// .println("In welches Menü wollen Sie? \n 1.Simulationsmenü \n 2.Kundenmenü \n 3.Objektmenü \n");

			do {
				menu = IO.readInt("  ╚═Eingabe═> ");
			} while (menu <= 0 || menu >= 3 + 1);

			switch (menu) {
			case 1:
				simulationsmenu();
				break;
			case 2:
				kundenmenu();
				break;
			case 3:
				objektmenu();
				break;
			default:
				System.out.println("Falsche Eingabe!");
				break;
			}
		}
	}

	/**
	 * Der Benutzer gelangt durch das Hauptmenü in das Simulationsmenü. Hier
	 * kann er die Zeit vorstellen, sich die aktuelle Zeit anzeigen lassen und
	 * das gesamte Programm beenden. Das Programm kann nur in diesem Menü
	 * beendet werden.
	 */
	public void simulationsmenu() {

		int smenu = 0;
		do {
			System.out.println("╔═════════════════╦═══════════════════╗");
			System.out.println("║ SIMULATIONSMENÜ ║ " + formatBlanks(s.getAktuellesDatum().toString(), 17) + " ║");
			System.out.println("╚═╦══┬════════════╩════════════┬══════╝");
			System.out.println("  ║  |  1. Stunden vorstellen  |    ");
			System.out.println("  ║  └──┬──────────────────────┴─┐   ");
			System.out.println("  ║     |   2. Datum ausgeben    |   ");
			System.out.println("  ║     └───┬────────────────────┴┐  ");
			System.out.println("  ║         |   3. ProgrammEnde   |  ");
			System.out.println("  ║         └──┬──────────────────┴─┐ ");
			System.out.println("  ║           }┤    4. Hauptmenü    |");
			System.out.println("  ║            └────────────────────┘ ");
			System.out.println("  ║ [1 - 4]");

			// System.out.println("\n SIMULATIONSMENÜ \n ");
			// System.out
			// .println("Was wollen Sie tun? \n 1. Stunden vorstellen \n 2. Zeit anzeigen \n 3. Programm beenden \n 4. Hauptmenü \n");

			do {
				smenu = IO.readInt("  ╚═Eingabe═> ");
			} while (smenu <= 0 || smenu >= 4 + 1);

			switch (smenu) {
			case 1:
				int h;
				System.out.println("╔══════════════════════════════════════════╗");
				System.out.println("║ Wie viele Stunden wollen Sie vorstellen? ║");
				System.out.println("╚═╦════════════════════════════════════════╝");
				System.out.print("  ╚═");

				do {
					h = IO.readInt("Eingabe═> ");

					if (h < 0) {
						System.out.println("╔═══════════════════════════════════╗");
						System.out.println("║ Bitte eine Zahl größer 0 eingeben ║");
						System.out.println("╚═╦═════════════════════════════════╝");
						System.out.print("  ╚═");
					}
				} while (h < 0);
				s.zeitVor(h);
				break;
			case 2:
				System.out.println("╔══════════════════════════════════════════╗");
				System.out.println("║ Das aktuelle Datum ist: " + formatBlanks(s.getAktuellesDatum().toString(), 17) + "║");
				System.out.println("╚═╦════════════════════════════════════════╝");
				System.out.print("  ╚═");

				weiter();
				break;
			case 3:
				System.out.println("╔══════════════════╗");
				System.out.println("║ Programm beendet ║");
				System.out.println("╚═╦════════════════╝");
				System.out.println("  ╠═© Authors: Robin Haarlammert, Yannick Retzlaff, Hendrik Schulze Brnadhoff");
				System.out.println("  ╠═© Qualtity Management: Ubisoft");
				System.out.println("  ╠═© Server Security Management: Sony");
				System.out.println("  ╠═© Server Supply: ElectonicArts");
				System.out.println("  ╠═© Artworks: Ecce Homo");
				System.out.println("  ╠═© Financials: BER");
				System.out.println("  ╚═© Launch Management: Deutsche Bahn");
				System.out.println("  PARENTAL ADVISORY: Zu Risikien und Nebenwirkungen fragen Sie Ihren Apotheker oder Waldi Hartmann.");
				System.exit(1);
				break;
			case 4:
				break;
			default:
				System.out.println("Falsche Eingabe!");
				break;
			}
		} while (smenu != 4);

	}

	/**
	 * Der Benutzer gelangt über das Hauptmenü in das Kundenmenü. Hier kann man
	 * sich als neuen Kunden eintragen, sich alle registrierten Kunden anzeigen
	 * lassen oder oder sich mit einer registrierten Kundennummer ins
	 * Kunden-Auswahl-Menü begeben.
	 */
	public void kundenmenu() {
		int kmenu = 0;
		do {
			System.out.println("╔══════════════╦═══════════════════╗");
			System.out.println("║  KUNDENMENÜ  ║ " + formatBlanks(s.getAktuellesDatum().toString(), 17) + " ║");
			System.out.println("╚═╦══┬═════════╩═════════════════┬═╝");
			System.out.println("  ║  |  1. Neuen Kunden anlegen  |    ");
			System.out.println("  ║  └──┬────────────────────────┴─┐   ");
			System.out.println("  ║     |  2. Kundenliste ausgeben |   ");
			System.out.println("  ║     └───┬──────────────────────┴─┐  ");
			System.out.println("  ║         |  3. Kunden auswählen   ├{  ");
			System.out.println("  ║         └──┬─────────────────────┴─┐ ");
			System.out.println("  ║           }┤   4. Hauptmenü        | ");
			System.out.println("  ║            └───────────────────────┘ ");
			System.out.println("  ║ [1 - 4]");

			// System.out.println("\n \n KUNDENMENÜ  \n");
			// System.out
			// .println("Was wollen Sie tun? \n 1. Neuen Kunden ins Kundenregister eintragen \n 2. Kundenregister anzeigen \n 3. KUNDEN-AUSWAHL-MENÜ \n 4.Zurück ins Hauptmenü \n");

			do {
				kmenu = IO.readInt("  ╚═Eingabe═> ");
			} while (kmenu <= 0 || kmenu >= 4 + 1);

			switch (kmenu) {
			case 1: // neuer Kunde
				String vorname = " ";
				String name = " ";
				int checkStatus = s.getKundenKartei().size();

				System.out.println("╔════════════════════════╗");
				System.out.println("║  Neuen Kunden anlegen  ║");
				System.out.println("╚═╦══════════════════════╝");
				do {
					vorname = IO.readString("  ╠═Vorname [Alphabet]═> ");
				} while (!vorname.matches("[ßüäöÜÄÖ a-zA-Z-]*") || vorname.equals(""));
				do {
					name = IO.readString("  ╚═Nachname [Alphabet]═> ");
				} while (!name.matches("[ßüäöÜÖÄ a-zA-Z-]*") || name.equals(""));

				s.kundenAnlegen(name, vorname);
				if (checkStatus + 1 == s.getKundenKartei().size()) {
					System.out.println("╔══════════════════════════════════════════════════════════════════╗");
					System.out.println("║  Der Kunde wurde unter der Nummer " + s.getKundenKartei().get(s.getKundenKartei().size() - 1).getKundenNummer() + " erfolgreich aufgenommen.  ║");
					System.out.println("╚══════════════════════════════════════════════════════════════════╝");
					weiter();
				} else {
					System.out.println("╔════════════════════════════════════════════════════════════════════════════════════╗");
					System.out.println("║  Es ist ein unerwarteter Fehler aufgetreten. Kontaktieren Sie einen Administrator. ║");
					System.out.println("╚════════════════════════════════════════════════════════════════════════════════════╝");
					weiter();
				}
				break;
			case 2: // kunden Auflisten
				s.kundenAuflisten();
				weiter();

				break;
			case 3: // Kunden auswählen
				boolean gefunden = false;
				do {
					s.kundenAuflisten();
					System.out.println("╔═══════════════════╗");
					System.out.println("║ Kunden auswählen  ║");
					System.out.println("╚═╦═════════════════╝");

					int knummer = IO.readInt("  ╚═Kundennummer [vgl. Kundenliste]═> ");

					for (Kunde k : s.getKundenKartei()) {
						if (k.getKundenNummer() == knummer) {
							gefunden = true;
						}
					}
					if (gefunden) {
						kundenAuswahlmenu(knummer);
					} else {
						System.out.println("╔═════════════════════════════════════════════╗");
						System.out.println("║  Es existiert kein Kunde mit dieser Nummer. ║");
						System.out.println("╚═════════════════════════════════════════════╝");
						weiter();
					}
				} while (!gefunden);

				break;
			case 4: // Zurück ins Hauptmenü
				break;
			default:
				System.out.println("Falsche Eingabe!");
				break;
			}

		} while (kmenu != 4);
	}

	/**
	 * Der Benutzer gelangt über das Hauptmenü in das Objeltmenü. Hier kann er
	 * sich alle verfügbaren (bestand > 0), verkäuflichen oder verleihbaren
	 * Objekte auflisten lassen. Weiterhin können in diesem Menü neue Objekte in
	 * den Bestand aufgenommen werden.
	 */
	public void objektmenu() {
		int omenu = 0;
		do {
			System.out.println("╔══════════════╦═══════════════════╗");
			System.out.println("║  OBJEKTMENÜ  ║ " + formatBlanks(s.getAktuellesDatum().toString(), 17) + " ║");
			System.out.println("╚═╦══┬═════════╩═════════════════┬═╝");
			System.out.println("  ║  |  1. Objekte auflisten     |    ");
			System.out.println("  ║  └──┬────────────────────────┴──┐   ");
			System.out.println("  ║     | 2. Verkäufliche auflisten |   ");
			System.out.println("  ║     └──┬────────────────────────┴──┐  ");
			System.out.println("  ║        | 3. Verleihbare auflisten  |  ");
			System.out.println("  ║        └──┬────────────────────────┴──┐ ");
			System.out.println("  ║           | 4. Neues Objekt aufnehmen |  ");
			System.out.println("  ║           └──┬────────────────────────┴──┐ ");
			System.out.println("  ║             }┤ 5. Hauptmenü              | ");
			System.out.println("  ║              └───────────────────────────┘ ");
			System.out.println("  ║ [1 - 5]");

			// System.out.println("\n \n OBJEKTMENÜ \n ");
			// System.out
			// .println("Was wollen Sie tun? \n 1.Verfügbare Objekte auflisten \n 2.Verkäufliche Objekte auflisten \n 3.Verleihbare Objekte auflisten \n 4.Objekt in Datenbank aufnehmen \n 5.Zur�ck ins Hauptmenü");

			do {
				omenu = IO.readInt("  ╚═Eingabe═> ");
			} while (omenu <= 0 || omenu >= 5 + 1);

			switch (omenu) {
			case 1:
				s.verfuegbareObjekteAuflisten();
				weiter();
				break;
			case 2:
				s.verkaeuflicheAuflisten();
				weiter();
				break;
			case 3:
				s.verleihbareObjekteAuflisten();
				weiter();
				break;
			case 4:
				double verkaufspreis;
				double leihgebuehr;
				double handlingPauschale;
				double wertersatzVerlust;
				int bestand;
				String name;
				System.out.println("╔══════════════════════╗");
				System.out.println("║ Neues Objekt anlegen ║");
				System.out.println("╚═╦════════════════════╝");

				do {
					name = IO.readString("  ╠═Name des Objekts [Alphabet]═> ");
				} while (!name.matches("[ßüäöÜÖÄ a-zA-Z-]*") || name.equals(""));
				do {
					verkaufspreis = IO.readDouble("  ╠═Verkaufspreis [mit Dezimalpunkt] [Mindestens 0]═> ");

				} while (verkaufspreis < 0);
				do {
					leihgebuehr = IO.readDouble("  ╠═Leihgebühr [mit Dezimalpunkt] [Mindestens 0]═> ");

				} while (leihgebuehr < 0);
				do {
					handlingPauschale = IO.readDouble("  ╠═Handlingpauschale [mit Dezimalpunkt] [Mindestens 0]═> ");

				} while (handlingPauschale < 0);
				do {
					wertersatzVerlust = IO.readDouble("  ╠═Wertersatz bei Verlust [mit Dezimalpunkt] [Mindestens 0]═> ");

				} while (wertersatzVerlust < 0);
				do {
					bestand = IO.readInt("  ╚═Bestand [Ganzzahlig] [Mindestens 1]═> ");

				} while (bestand < 1);

				s.objektAufnehmen(name, verkaufspreis, leihgebuehr, handlingPauschale, wertersatzVerlust, bestand);
				break;
			case 5:
				break;
			default:
				System.out.println("Fehler, Programm bitte neu starten!");
				break;
			}
		} while (omenu != 5);
	}

	/**
	 * @param knummer
	 *            wird aus der Methode kundenmenu() übergeben. Sie wird in der
	 *            Methode mit Der Kunde-Liste abgeglichen und so wird der
	 *            ausgewählte Kunde identifiziert. Der Benutzer kann in diesem
	 *            Menü Objekte kaufen, seine Transaktionsliste anzeigen lassen,
	 *            seine Kundendaten ändern, Objekte leihen und der ausgewählte
	 *            Kunde kann abgerechnet werden.
	 */

	public void kundenAuswahlmenu(int knummer) {
		int kamenu = 0;

		do {

			String vollerName = "";
			for (Kunde k : s.getKundenKartei()) {
				if (k.getKundenNummer() == knummer) {
					vollerName = k.getVorname() + " " + k.getName();
				}
			}
			System.out.println("╔═════════════════╦═══════════════════╦════════════════════╗");
			System.out.println("║  KUNDENAUSWAHL  ║ " + formatBlanks(s.getAktuellesDatum().toString(), 17) + " ║" + formatBlanks(vollerName, 19) + " ║");
			System.out.println("╚═╦══┬════════════╩═════════════════┬═╩════════════════════╝");
			System.out.println("  ║  |  1. Transaktionen anzeigen   |    ");
			System.out.println("  ║  └──┬───────────────────────────┴──┐   ");
			System.out.println("  ║     | 2. Objekt kaufen             |   ");
			System.out.println("  ║     └──┬───────────────────────────┴──┐  ");
			System.out.println("  ║        | 3. Objekt ausleihen          |  ");
			System.out.println("  ║        └──┬───────────────────────────┴──┐ ");
			System.out.println("  ║           | 4. Objekte zurückgeben       |  ");
			System.out.println("  ║           └──┬───────────────────────────┴──┐ ");
			System.out.println("  ║              | 5. Abrechnen                 | ");
			System.out.println("  ║              └──┬───────────────────────────┴──┐ ");
			System.out.println("  ║                 | 6. Kundendaten ändern        |  ");
			System.out.println("  ║                 └──┬───────────────────────────┴──┐ ");
			System.out.println("  ║                   }┤ 7. Kundenmenü                |  ");
			System.out.println("  ║                    └──────────────────────────────┘ ");
			System.out.println("  ║ [1 - 7]");

			// System.out.println(" \n \n KUNDEN-AUSWAHL-MENü  \n");

			// System.out
			// .println("Was wollen Sie tun? \n 1.Objekt kaufen \n 2.Transaktionsliste anzeigen \n 3.Kundendaten ändern \n 4.Objekt leihen \n 5.Kunden abrechnen \n 6.Rückgabe \n 7.Zurück ins Kundenmenü");

			do {
				kamenu = IO.readInt("  ╚═Eingabe═> ");
			} while (kamenu <= 0 || kamenu >= 7 + 1);

			switch (kamenu) {
			case 2: // Verkaufen
				int zuverkaufen;
				int kaufanzahl;
				for (int i = 0; i < s.getKundenKartei().size(); i++) {
					if (s.getKundenKartei().get(i).getKundenNummer() == knummer) {
						int anzVerkaeufliche = 0;
						for (int j = 0; j < s.getInventar().size(); j++) {
							if (s.getInventar().get(j).verkaeuflich()) {
								anzVerkaeufliche++;
							}
						}
						if (anzVerkaeufliche > 0) {
							s.verkaeuflicheAuflisten();
							System.out.println("╔══════════════════╗");
							System.out.println("║ Objekt verkaufen ║");
							System.out.println("╚═╦════════════════╝");
							do {
								zuverkaufen = IO.readInt("  ╠═Objektnummer [vgl. Liste]═> ");
							} while (zuverkaufen >= s.getInventar().size() || zuverkaufen < 0
									|| (s.getInventar().get(zuverkaufen).getVerkaufsPreis() == 0 && !s.getInventar().get(zuverkaufen).getService()));

							do {
								kaufanzahl = IO.readInt("  ╚═Anzahl [1 - " + s.getInventar().get(zuverkaufen).getBestand() + "]═> ");
							} while (kaufanzahl > s.getInventar().get(zuverkaufen).getBestand() || kaufanzahl <= 0);

							Gegenstand o = s.objektRausnehmen(zuverkaufen, kaufanzahl);

							if (kaufanzahl != 0) {
								s.getKundenKartei().get(i).kaufen(o, o.getBestand(), s.getAktuellesDatum());
							}

							if (s.getInventar().get(zuverkaufen).getService()) {
								System.out.println("\tGesamtkosten: " + s.getKundenKartei().get(i).serviceAbrechnen());
								weiter();
							}
						} else {
							System.out.println("╔══════════════════════════════════════════════════════════════════╗");
							System.out.println("║ Es befinden sich aktuell keine verkäuflichen Objekte im Bestand. ║");
							System.out.println("╚══════════════════════════════════════════════════════════════════╝");
							weiter();

						}
					}
				}
				break;
			case 1: // Transaktionsliste anzeigen
				for (int i = 0; i < s.getKundenKartei().size(); i++) {
					if (s.getKundenKartei().get(i).getKundenNummer() == knummer) {
						s.getKundenKartei().get(i).transaktionenAuflisten();
					}

				}
				weiter();
				break;
			case 6: // Kundennamen ändern
				String vorname = "";
				String name = "";
				System.out.println("╔══════════════════════╗");
				System.out.println("║  Kundendaten ändern  ║");
				System.out.println("╚═╦════════════════════╝");
				do {
					vorname = IO.readString("  ╠═Vorname [Alphabet]═> ");
				} while (!vorname.matches("[ßüäöÜÄÖ a-zA-Z-]*") || vorname.equals(""));
				do {
					name = IO.readString("  ╚═Nachname [Alphabet]═> ");
				} while (!name.matches("[ßüäöÜÖÄ a-zA-Z-]*") || name.equals(""));
				for (int i = 0; i < s.getKundenKartei().size(); i++) {
					if (s.getKundenKartei().get(i).getKundenNummer() == knummer) {
						s.getKundenKartei().get(i).setVorname(vorname);
						s.getKundenKartei().get(i).setName(name);
					}
				}

				break;
			case 3: // Verleihen
				int zuverleihen;
				int leihanzahl;
				int leihzeit;

				for (int i = 0; i < s.getKundenKartei().size(); i++) {
					if (s.getKundenKartei().get(i).getKundenNummer() == knummer) {
						int anzVerleihbare = 0;
						for (int j = 0; j < s.getInventar().size(); j++) {
							if (s.getInventar().get(j).verleihbar()) {
								anzVerleihbare++;
							}
						}
						if (anzVerleihbare > 0) {
							s.verleihbareObjekteAuflisten();
							System.out.println("╔══════════════════╗");
							System.out.println("║ Objekt ausleihen ║");
							System.out.println("╚═╦════════════════╝");

							do {
								zuverleihen = IO.readInt("  ╠═Objektnummer [vgl. Liste]═> ");
							} while (zuverleihen >= s.getInventar().size() || zuverleihen < 0 || s.getInventar().get(zuverleihen).getLeihGebuehr() == 0);
							do {
								leihanzahl = IO.readInt("  ╠═Anzahl [1 - " + s.getInventar().get(zuverleihen).getBestand() + "]═> ");
							} while (leihanzahl > s.getInventar().get(zuverleihen).getBestand() || leihanzahl <= 0);
							do {
								leihzeit = IO.readInt("  ╚═Leihdauer [Ganzzahlig in Tagen] [Mindestens 1]═> ");
							} while (leihzeit < 1);
							Gegenstand o = s.objektRausnehmen(zuverleihen, leihanzahl);

							if (leihanzahl != 0) {
								s.getKundenKartei().get(i).leihen(o, leihanzahl, s.getAktuellesDatum(), leihzeit);
							}
						} else {
							System.out.println("╔═════════════════════════════════════════════════════════════════╗");
							System.out.println("║ Es befinden sich aktuell keine verleihbaren Objekte im Bestand. ║");
							System.out.println("╚═════════════════════════════════════════════════════════════════╝");
							weiter();
						}

					}
				}
				break;
			case 5: // Abrechnen
				for (int i = 0; i < s.getKundenKartei().size(); i++) {
					if (s.getKundenKartei().get(i).getKundenNummer() == knummer) {
						System.out.println("\tGesamtkosten: " + s.getKundenKartei().get(i).kundenAbrechnen(s.getAktuellesDatum()));
						weiter();
					}
				}
				break;
			case 4: // Rückgabe
				int trans;

				for (int i = 0; i < s.getKundenKartei().size(); i++) {
					if (s.getKundenKartei().get(i).getKundenNummer() == knummer) {
						if (s.getKundenKartei().get(i).rueckgebareVorhanden()) {
							s.getKundenKartei().get(i).rueckgabeTransaktionenAuflisten();

							do {
								trans = IO.readInt("Welchen Gegenstand möchten Sie zurückgeben? ");
								if (trans >= s.getKundenKartei().get(i).getTransaktionsListe().size() || trans < 0 || s.getKundenKartei().get(i).getTransaktionsListe().get(trans) instanceof Verkauf
										|| ((Verleih) s.getKundenKartei().get(i).getTransaktionsListe().get(trans)).getZurueckgegeben()) {
									System.out.println("Bitte gültige Transaktionsnummer eingeben! ");
								}
							} while (trans >= s.getKundenKartei().get(i).getTransaktionsListe().size() || trans < 0 || s.getKundenKartei().get(i).getTransaktionsListe().get(trans) instanceof Verkauf
									|| ((Verleih) s.getKundenKartei().get(i).getTransaktionsListe().get(trans)).getZurueckgegeben());

							boolean complete = IO.readBoolean("Sind die Gegenstände noch komplett? (Y/N) ");

							int verloren = 0;
							if (!complete) {
								do {
									verloren = IO.readInt("Wieviel Objekte haben Sie verloren?");
									if (verloren > s.getKundenKartei().get(i).getTransaktionsListe().get(trans).getAnzahl() || verloren <= 0) {
										System.out.println("Bitte gültige Anzahl der verlorenen Objekte eingeben! [mindestens 1] ");
									}
								} while (verloren > s.getKundenKartei().get(i).getTransaktionsListe().get(trans).getAnzahl() || verloren <= 0);

							}

							Gegenstand toFill = s.getKundenKartei().get(i).rueckgabe((Verleih) s.getKundenKartei().get(i).getTransaktionsListe().get(trans), verloren);

							s.objektAufnehmen(toFill.getName(), toFill.getVerkaufsPreis(), toFill.getLeihGebuehr(), toFill.getHandlingPauschale(), toFill.getWertersatzVerlust(), toFill.getBestand());

						} else
							System.out.println("Sie haben momentan keine Objekte bei uns ausgeliehen");

					}
				}
				weiter();
				break;
			case 7: // Zurück ins übergeordnete Menü
				break;
			default:
				System.out.println("Falsche Eingabe!");
				break;
			}

		} while (kamenu != 7);

	}

	/**
	 * Die weiter-Methode wird nach der Ausgabe von Listen aufgerufen.
	 */
	public void weiter() {
		IO.readLine(" \n ENTER drücken um fortzufahren.");

	}

	/**
	 * Füllt bei Start des Programms die Kunden-Liste mit voreingestellten
	 * Kunden und die Objekt-Liste mit den verkäuflichen/verleihaberen
	 * Gegenständen
	 */

	public void einmaligesBefullen() {
		s.objektAufnehmen("Bierglas", 1.6, 0.8, 0.2, 1.0, 1250);
		s.objektAufnehmen("Pinneken", 1.4, 1.0, 0.2, 0.5, 1490);
		s.objektAufnehmen("Dose lauwarme Cervisia", 2.0, 0, 0, 0, 520);
		s.objektAufnehmen("Fass lauwarme Cervisia", 50.0, 0, 0, 0, 10);
		s.objektAufnehmen("Zapfanlage, klein", 209.0, 80.0, 9.0, 90.0, 18);
		s.objektAufnehmen("Zapfanlage, groß", 0, 220.0, 29.0, 800.0, 3);
		s.objektAufnehmen("Bierdeckel, 10 Stck", 0.15, 0, 0, 0, 3900);
		s.objektAufnehmen("Service: Frischwasserinstallation", 0, 0, 185.0, 0, 0);
		s.objektAufnehmen("Toilettenwagen", 0, 89.0, 299.0, 0, 6);
		s.kundenAnlegen("Meier", "Horst");
		s.kundenAnlegen("Mueller", "Dieter");
		s.kundenAnlegen("Schulze", "Uschi");
		s.kundenAnlegen("Schmidt", "Anneliese");
		// s.verfuegbareObjekteAuflisten();

	}

	/**
	 * Die Methode stellt eine Zeichenkette auf eine bestimmte Länge ein, indem
	 * sie mit vorangestellten Leerzeichen aufgefüllt wird.
	 * 
	 * @param st
	 *            Der zu formatierende String
	 * @param len
	 *            Die Länge des auszugebenen String
	 * @return String Eine mit führenden Leerzeichen verlängerte Zeichenkette
	 */
	public String formatBlanks(String st, int len) {
		String result = String.valueOf(st);
		while (result.length() < len) {
			result = " " + result;
		}
		return result;
	}

	public static void main(String[] args) {

		Benutzerschnittstelle help = new Benutzerschnittstelle();

		help.einmaligesBefullen();
		help.hauptmenu();
	}

}
